package util

import (
	"time"

	"gitee.com/shoyer/logger"
)

// 用的是2006-01-02这种格式。其实在Go语言里，这些数字都是有特殊函义的，不是随便指定的数字，见下面列表：
// 注意格式的数字年份使用，http://www.ganzhishi.com/view.asp?id=2240

// 获取当前的毫秒时间截
func GetMillisecond() int64 {
	return time.Now().UnixNano() / 1000000
}

// 获取当前时间截，注意这取到的是一个没有时区信息的utc标准时间截
func GetTimestamp() int64 {
	return time.Now().Unix()
}

// 获取一个utc时间截
func GetUTCTimestamp() int64 {
	utc := time.Now().UTC().Format("2006-01-02 15:04:05")
	utcTime, err := time.ParseInLocation("2006-01-02 15:04:05", utc, time.Local)
	logger.ErrorfIfNotNil(err)
	return utcTime.Unix()
}

// 获得时区与utc之间相差的秒数
func GetDiffSeconds() int64 {
	date := time.Now()
	t := date.Unix()

	utc := date.UTC().Format("2006-01-02 15:04:05")
	utcTime, err := time.ParseInLocation("2006-01-02 15:04:05", utc, time.Local)
	logger.ErrorfIfNotNil(err)
	tutc := utcTime.Unix()

	return t - tutc
}

// GetFormatDate GetFormatDate
func GetFormatDate() string {
	return time.Now().Format("2006-01-02")
}

// 通过时间截获得时间对象
func GetTime(timestamp int64) *time.Time {
	t := time.Unix(timestamp, 0)
	return TimeToTimePointer(t)
}

// 通过毫秒时间截获得时间对象
func GetTimeByMillisecond(millisecond int64) *time.Time {
	return GetTime(millisecond / 1000)
}

// 将形如2010-01-01的日期转换为一个时间截，如果转换失败，则返回0
func Date2Timestamp(s string) int64 {
	t, err := time.Parse("2006-01-02", s)
	if err != nil {
		return 0
	}

	return t.Unix()
}

// 将时间对象转成一个标准的日期格式2006-01-02
func Time2DateStr(t *time.Time) string {
	return t.Format("2006-01-02")
}

// 将时间对象转成一个毫秒时间截
func Time2Millisecond(t *time.Time) int64 {
	return t.UnixNano() / 1000000
}
